﻿// 894. 拆分-Nim游戏.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//


/*
https://www.acwing.com/problem/content/896/

给定 n 堆石子，两位玩家轮流操作，每次操作可以取走其中的一堆石子，然后放入两堆规模更小的石子
（新堆规模可以为 0，且两个新堆的石子总数可以大于取走的那堆石子数），
最后无法进行操作的人视为失败。

问如果两人都采用最优策略，先手是否必胜。

输入格式
第一行包含整数 n。

第二行包含 n 个整数，其中第 i 个整数表示第 i 堆石子的数量 ai。 

输出格式
如果先手方必胜，则输出 Yes。

否则，输出 No。

数据范围
1≤n,ai≤100
输入样例：
2
2 3
输出样例：
Yes
*/


#include <iostream>
#include <cstring>
#include <unordered_set>

using namespace std;

const int N = 200;
int f[N];

int sg(int x) {
	if (f[x] != -1) return f[x];
	unordered_set<int> S;

	for (int i = 0; i < x; i++)
		for (int j = 0; j <=i; j++)
			S.insert(sg(i) ^ sg(j));

	for (int i = 0; i < N; i++)
		if (S.count(i) == 0) {
			f[x] = i; return i;
		}

	return 0;
}



int main()
{
	int n; cin >> n;
	int res = 0;

	memset(f, -1, sizeof f);
	f[0] = 0;
	for (int i = 0; i < n; i++) {
		int t; cin >> t;
		res ^= sg(t);
	}

	if (res) {
		cout << "Yes" << endl;
	}
	else {
		cout << "No" << endl;
	}


	return 0;
}

 